{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "from sklearn.linear_model import LinearRegression, RidgeCV, LassoCV, ElasticNetCV\n",
    "\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.metrics import r2_score  \n",
    "\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>weathersit_1</th>\n",
       "      <th>weathersit_2</th>\n",
       "      <th>weathersit_3</th>\n",
       "      <th>workingday_0</th>\n",
       "      <th>workingday_1</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>...</th>\n",
       "      <th>mnth_12</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>yr</th>\n",
       "      <th>cnt</th>\n",
       "      <th>weekday</th>\n",
       "      <th>season</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>985</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>801</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1349</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1562</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1600</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 27 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant  weathersit_1  weathersit_2  weathersit_3  workingday_0  \\\n",
       "0        1             0             1             0             1   \n",
       "1        2             0             1             0             1   \n",
       "2        3             1             0             0             0   \n",
       "3        4             1             0             0             0   \n",
       "4        5             1             0             0             0   \n",
       "\n",
       "   workingday_1  mnth_1  mnth_2  mnth_3  mnth_4   ...    mnth_12      temp  \\\n",
       "0             0       1       0       0       0   ...          0  0.355170   \n",
       "1             0       1       0       0       0   ...          0  0.379232   \n",
       "2             1       1       0       0       0   ...          0  0.171000   \n",
       "3             1       1       0       0       0   ...          0  0.175530   \n",
       "4             1       1       0       0       0   ...          0  0.209120   \n",
       "\n",
       "      atemp       hum  windspeed  holiday  yr   cnt  weekday  season  \n",
       "0  0.373517  0.828620   0.284606        0   0   985        6       1  \n",
       "1  0.360541  0.715771   0.466215        0   0   801        0       1  \n",
       "2  0.144830  0.449638   0.465740        0   0  1349        1       1  \n",
       "3  0.174649  0.607131   0.284297        0   0  1562        2       1  \n",
       "4  0.197158  0.449313   0.339143        0   0  1600        3       1  \n",
       "\n",
       "[5 rows x 27 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(\"FE_day.csv\")\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train :(365, 25)\n",
      "test : (366, 25)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\AI\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py:3694: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  errors=errors)\n"
     ]
    }
   ],
   "source": [
    "train = data[data.yr ==0]\n",
    "train.drop(['instant','yr'],axis = 1,inplace = True)\n",
    "print (\"train :\" + str (train.shape))\n",
    "\n",
    "\n",
    "test = data[data.yr == 1]\n",
    "testID = test['instant']\n",
    "test.drop(['instant','yr'],axis = 1,inplace = True)\n",
    "print (\"test : \" + str(test.shape))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>weathersit_1</th>\n",
       "      <th>weathersit_2</th>\n",
       "      <th>weathersit_3</th>\n",
       "      <th>workingday_0</th>\n",
       "      <th>workingday_1</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>...</th>\n",
       "      <th>mnth_11</th>\n",
       "      <th>mnth_12</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>cnt</th>\n",
       "      <th>weekday</th>\n",
       "      <th>season</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>985</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>801</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1349</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1562</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1600</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 25 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   weathersit_1  weathersit_2  weathersit_3  workingday_0  workingday_1  \\\n",
       "0             0             1             0             1             0   \n",
       "1             0             1             0             1             0   \n",
       "2             1             0             0             0             1   \n",
       "3             1             0             0             0             1   \n",
       "4             1             0             0             0             1   \n",
       "\n",
       "   mnth_1  mnth_2  mnth_3  mnth_4  mnth_5   ...    mnth_11  mnth_12      temp  \\\n",
       "0       1       0       0       0       0   ...          0        0  0.355170   \n",
       "1       1       0       0       0       0   ...          0        0  0.379232   \n",
       "2       1       0       0       0       0   ...          0        0  0.171000   \n",
       "3       1       0       0       0       0   ...          0        0  0.175530   \n",
       "4       1       0       0       0       0   ...          0        0  0.209120   \n",
       "\n",
       "      atemp       hum  windspeed  holiday   cnt  weekday  season  \n",
       "0  0.373517  0.828620   0.284606        0   985        6       1  \n",
       "1  0.360541  0.715771   0.466215        0   801        0       1  \n",
       "2  0.144830  0.449638   0.465740        0  1349        1       1  \n",
       "3  0.174649  0.607131   0.284297        0  1562        2       1  \n",
       "4  0.197158  0.449313   0.339143        0  1600        3       1  \n",
       "\n",
       "[5 rows x 25 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train[\"cnt\"]\n",
    "X_train = train.drop(['cnt'],axis = 1)\n",
    "\n",
    "\n",
    "y_test = test[\"cnt\"]\n",
    "X_test = test.drop([\"cnt\"], axis = 1) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "mean y diff : 1.5914175510574313\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "mean_y = y_train.mean()\n",
    "std_y = y_train.std()\n",
    "y_train = (y_train - mean_y)/std_y\n",
    "\n",
    "y_test = (y_test - mean_y)/std_y\n",
    "\n",
    "mean_test_y = y_test.mean()\n",
    "\n",
    "mean_diff = mean_test_y;\n",
    "\n",
    "print (\"mean y diff :\" , mean_diff)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best alpha : 1.0\n",
      "cv of rmse : 0.42849053572960105\n",
      "RMSE on Training set : 0.4005829643299815\n",
      "RMSE on Test set : 0.7493172343359515\n",
      "r2_score on Training set : 0.8390924460751119\n",
      "r2_score on Test set : 0.6654711220923666\n"
     ]
    }
   ],
   "source": [
    "alphas = [0.01,0.1,1,10,100]\n",
    "ridge = RidgeCV(alphas = alphas,store_cv_values=True )\n",
    "\n",
    "ridge.fit(X_train, y_train)\n",
    "\n",
    "alpha = ridge.alpha_\n",
    "print(\"Best alpha :\", alpha)\n",
    "\n",
    "mse_cv = np.mean(ridge.cv_values_, axis = 0)\n",
    "rmse_cv = np.sqrt(mse_cv)\n",
    "print(\"cv of rmse :\", min(rmse_cv))\n",
    "\n",
    "y_train_pred = ridge.predict(X_train)\n",
    "rmse_train = np.sqrt(mean_squared_error(y_train,y_train_pred))\n",
    "\n",
    "y_test_pred = ridge.predict(X_test)\n",
    "y_test_pred += mean_diff\n",
    "rmse_test = np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "\n",
    "print(\"RMSE on Training set :\", rmse_train)\n",
    "print(\"RMSE on Test set :\", rmse_test)\n",
    "\n",
    "r2_score_train = r2_score(y_train,y_train_pred)\n",
    "r2_score_test = r2_score(y_test,y_test_pred)\n",
    "print(\"r2_score on Training set :\", r2_score_train)\n",
    "print(\"r2_score on Test set :\", r2_score_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridge picked 24 features and eliminated the other 0 features\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "coefs = pd.Series(ridge.coef_, index = X_train.columns)\n",
    "print(\"Ridge picked \" + str(sum(coefs != 0)) + \" features and eliminated the other \" +  \\\n",
    "      str(sum(coefs == 0)) + \" features\")\n",
    "\n",
    "imp_coefs = pd.concat([coefs.sort_values().head(10),\n",
    "                     coefs.sort_values().tail(10)])\n",
    "imp_coefs.plot(kind = \"barh\")\n",
    "plt.title(\"Coefficients in the Ridge Model\")\n",
    "plt.show()\n",
    "\n",
    "mse_mean = np.mean(ridge.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "Lasso"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best alpha : 0.0006002550010068688\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEKCAYAAAAB0GKPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8VOW9x/HPLxsh7JCwGHbZRVmMuIC7ImjVamsFl3rdqFZv7XLbantbW71d7rXqbYtWEXGrS1v3HbGguIEEZF9jZAlbICxJCNl/948cekdMYIBMTjL5vl+veWXmnGdmfuc1yXxzznPO85i7IyIicjAJYRcgIiJNgwJDRESiosAQEZGoKDBERCQqCgwREYmKAkNERKKiwBARkagoMEREJCoKDBERiUpS2AXUp/T0dO/du3fYZYiINBnz58/f7u4Z0bSNq8Do3bs32dnZYZchItJkmNm6aNvqkJSIiERFgSEiIlGJWWCYWQ8zm2VmK8xsmZndVkubK81scXD72MyGRaxba2ZLzGyhmek4k4hIyGLZh1EJ/MjdF5hZG2C+mc1w9+URbb4ATnf3nWY2HpgCnBix/kx33x7DGkVEJEoxCwx33wxsDu4XmdkKIBNYHtHm44inzAG6x6oeERE5Mg3Sh2FmvYERwNwDNLseeCvisQPvmNl8M5sUu+pERCQaMT+t1sxaAy8A33f3wjranElNYIyJWDza3TeZWWdghpmtdPfZtTx3EjAJoGfPnvVev4iI1IjpHoaZJVMTFk+7+4t1tDkOmApc7O4F+5a7+6bgZz7wEjCqtue7+xR3z3L3rIyMqK49EZEQ7S6p4JWFG3nyk7XkbisOuxw5BDHbwzAzAx4FVrj7fXW06Qm8CFzt7qsjlrcCEoK+j1bAWOCuWNUqIrG1t7yKlz7byCsLN5K9bidV1f6vdb07pXHe0K7cdNrRdGiVEmKVcjCxPCQ1GrgaWGJmC4NlPwN6Arj7Q8AvgU7AgzX5QqW7ZwFdgJeCZUnAM+7+dgxrFZEY2LhrL8/MXcfTc9ezq6SC/p1b853T+nL24C6kt05h9uptzFyZzyOzc3l27npuO2cAV5/Ui5QkXSLWGJm7H7xVE5GVleUaGkQkPFXVzqotRcxalc/0ZVtYnLcbMxg7pAvXj+nLCb07EPwj+CWrthTxX28s54M12+nXuTUPXTWSfp3bhLAFzY+ZzQ/+UT94WwWGiBwJd+eZT9fz1pItLNywi+KySgCG92jP2GO6cOFxR9GjY1pUrzNzZT4/fWExZRXV/GniCM4c1DnW5Td7CgwRaTAPzMrhnumrGNilDaP6dOT4Xh04qW8nurZLPazX27hrLzc+kc2KLYXcMX4QN57at9a9EqkfhxIYcTVarYg0rCc/Wcs901dxyYhM7r1sGAkJR/7Fntm+Jc/ffDI//sdifvvmSpZuLOT33ziWtBR9XYVNPUsiclhe+iyPX76yjHOHdOF/vnlcvYTFPmkpSUy+YgQ/Pm8gry3exKUPfsy6gj319vpyeBQYInLINu/ey0+fX8LJfTvx54kjSE6s/68SM+OWM/vxxLWj2FJYyoV//pAZy7fW+/tI9BQYInLIHn4/l2p37rnsOFKTE2P6XqcNyOC1W8fQs1MaNz6ZzW/eWE5FVXVM31Nqp8AQkUOSX1jKM5+u5xsju9O9w8HPfqoPPTqm8fxNp3D1Sb145IMvuPzhT9i8e2+DvLf8PwWGiBySh2fnUlXtfPfMoxv0fVOTE7n760P588QRrNpSxIV//pC5uQUHf6LUGwWGiERtW1EZT89dx9eHZ9KrU6tQarhw2FG8fMto2qYmc+XUuTz+0RfE0+UBjZkCQ0SiNvWDXMorq7mlgfcu9te/SxtevnU0ZwzM4FevLeenLyymvFL9GrGmwBCRqOwpq+SpOeu4cNhR9M1oHXY5tE1NZsrVWXzvrH78PTuPq6bOpaC4LOyy4poCQ0Si8mHOdkrKq5hwQuOZdyYhwfjh2IH8aeIIFuXt4uIHPmLVlqKwy4pbCgwRicrMFfm0SU0iq3eHsEv5iouGHcXfvnMyZZXVfPMvH/NRzvawS4pLCgwROajqamfWqnxOG5ARk4v06sPwHu15+ZbRdGufyjXTPuX5+XlhlxR3GucnLyKNyrJNheQXlXF2Ix89tmYcqlM4sW9H/uMfi/jju2t0BlU9UmCIyEH9c+VWzOD0AY1/GuS2qck89m+juHRkJve/u5pfvLL0SzP8yeHT8I8iclAzV+Yzokd7OrVuEXYpUUlJSuDey4aR0aYFD7+fS0FxOfdfPjzmw5jEO+1hiMgB5ReVsjhvN2cP7hJ2KYfEzLhj/GD+84LBvLV0C9c9Po89weROcngUGCJyQO+t3AbAmQMbd/9FXW44tS/3fWsYc7/YwZVT57KrpDzskpqsmAWGmfUws1lmtsLMlpnZbbW0MTP7k5nlmNliMxsZse4aM1sT3K6JVZ0icmD/XLmVbu1SGdyt6c6xfenI7jx45UiWbypkwpQ55BeVhl1SkxTLPYxK4EfuPhg4CbjFzIbs12Y80D+4TQL+AmBmHYE7gROBUcCdZtb4Tv4WiXNllVV8uGY7Zw3q3OSnST3vmK5M+7cTWL+jhAkPz2HLboXGoYpZYLj7ZndfENwvAlYAmfs1uxh40mvMAdqbWTfgPGCGu+9w953ADGBcrGoVkdp9/HkBe8qrOHtw0zwctb8x/dN56vpR5BeV8a2HPyFvZ0nYJTUpDdKHYWa9gRHA3P1WZQIbIh7nBcvqWl7ba08ys2wzy962bVt9lSwiwPSlW2jdIonR/dLDLqXeHN+rI3+94UR2lpRz+cNzWF+g0IhWzAPDzFoDLwDfd/fC/VfX8hQ/wPKvLnSf4u5Z7p6VkdH4zxEXaSoqq6p5Z/lWzhrUmRZJ8XU66vAe7Xn2xpPYU17JhCmfKDSiFNPAMLNkasLiaXd/sZYmeUCPiMfdgU0HWC4iDWTe2p3s2FPOuKFdwy4lJoZmtuOZG06ipKJKoRGlWJ4lZcCjwAp3v6+OZq8C3w7OljoJ2O3um4HpwFgz6xB0do8NlolIA5m+bAstkhI4Y2D87rkPOaotT99wIiUVVUx8ZA4bdig0DiSWexijgauBs8xsYXA738xuMrObgjZvArlADvAI8F0Ad98B3A3MC253BctEpAFUVztvL93C6QMySEuJ7wEhjjmqHX+9/kSKyyqZMGUOG3dprvC6xOw3wd0/pPa+iMg2DtxSx7ppwLQYlCYiB7F44262FJbyk6EDwy6lQQzNbMfTN5zIxEfmcMUjc/j7d06mS9vUsMtqdHSlt4h8xVtLN5OUYJw9qGkNB3Ikhma244nrRrG9qIwrHpnDtiLN3rc/BYaIfIm7M33pFk4+uhPt0pLDLqdBjezZgceuHcWmXaVc/aiGEdmfAkNEvmTF5iLWFpTE7dlRBzOqT0ce+XYWudv2cM20TynWgIX/osAQkS95cUEeyYnG+UO7hV1KaMb0T+eBK0eydFMh1z8+j73lVWGX1CgoMETkXyqrqnl54SbOGtSZDq1Swi4nVOcO6cJ93xrGp2t3cPPT8ymvrA67pNApMETkX2av2cb24jK+MbJ72KU0ChcPz+R3lxzLe6u28YO/L2z2M/fF9wnWInJIXliwkQ5pyZzRROe+iIUJo3pSVFrJb95cQdvUJH57ybFNfuTew6XAEBEAdpdUMGP5Vq4Y1ZOUJB18iHTjaX3ZvbeCybNyaJuazO3jBzXL0FBgiAgAry/ZRHlltQ5H1eFHYwdQWFrBw7NzaZeWzHfP6Bd2SQ1OgSEiALwwP48BXVozNLNt2KU0SmbGry48ht17K/ift1fRvmUKV5zYM+yyGpQCQ0TI3VbMgvW7uKOZHmqJVkKC8YfLhlFUWsnPX15C25ZJfO24o8Iuq8HoQKWI8Mzc9SQlGJeMqHWeMomQnJjAA1eMJKtXB37wt4W8v7r5TNymwBBp5vaWV/GP+XmcN7QrnTXgXlRapiQy9ZoT6N+5DTc9NZ/565rHYNoKDJFm7rVFm9i9t4Jvn9Qr7FKalHYtk3niulF0bZfKtY/NY8Xm/ScUjT8KDJFmzN15cs5aBnRpzag+HcMup8nJaNOCp64fRVpKElc/+ilrt+8Ju6SYUmCINGMLN+xi6cZCrj65tzq7D1P3Dmn89YZRVLtz5dS5bIrjCZgUGCLN2FOfrKN1iyR1dh+hfp3b8OR1oyjcW8FVj85le3F8zqWhwBBppgqKy3h98WYuHZlJ6xY6w/5IDc1sx7RrT2DTrr18+9FP2V1SEXZJ9S5mgWFm08ws38yW1rH+xxFzfS81syoz6xisW2tmS4J12bGqUaQ5e27eBsqrqrlKnd315oTeHXn46izW5BdxzWPxN5dGLPcwHgfG1bXS3e9x9+HuPhy4A3jf3SPPTTszWJ8VwxpFmqWyyioe/3gtpw3IYECXNmGXE1dOH5DBA1eMZOnG3Vz32DxKyuMnNGIWGO4+G4j25OSJwLOxqkVEvuy1RZvZVlTGDWP6hF1KXBp7TFf+d8Jwstft4MYnsymtiI8JmELvwzCzNGr2RF6IWOzAO2Y238wmhVOZSHxyd6Z+kMvALm04tX962OXEra8ddxR/uGwYH39ewI1PZsfFrH2hBwZwIfDRfoejRrv7SGA8cIuZnVbXk81skpllm1n2tm3N5xJ9kcP1UU4BK7cUcf2pfXQqbYxdOrI793xzGB/mbOf6J5r+4anGEBgT2O9wlLtvCn7mAy8Bo+p6srtPcfcsd8/KyMiIaaEi8WDqh7mkt27BxcObz6B5Yfrm8d2571vDmJNbwLWPzWNPE+4IDzUwzKwdcDrwSsSyVmbWZt99YCxQ65lWInJo1mwt4r1V27jm5F60SEoMu5xm45IR3bn/8uHMW7uDK6fOZeee8rBLOiyxPK32WeATYKCZ5ZnZ9WZ2k5ndFNHsEuAdd4+8nr4L8KGZLQI+Bd5w97djVadIc/LUnHWkJCVwpU6lbXAXD8/koauOZ/nmQi57+JMmeUW4ucfPpOZZWVmena3LNkRqU1JeyYm/+SfnDOnC/ZcPD7ucZmtObgE3PJFN29Qknrx+FP06h3tas5nNj/byhcbQhyEiDeD1xZspKqtsdrPENTYn9e3Ec5NOorzKueSBj5m1Kj/skqKmwBBpJp6Zu55+nVuT1atD2KU0e0Mz2/HKraPp0TGN6x+fxyOzc2kKR3sUGCLNwPJNhSzcsIsrRvXUqbSNRGb7ljx/88mMG9qV37y5gluf/YxdJY27M1yBIdIMPDdvPSlJCVw6UqPSNiZpKUlMnjiSn4wbyPSlWxj3vx/w4ZrtYZdVJwWGSJwrKa/kpQUbueDYbrRPSwm7HNlPQoLx3TP68dJ3R9OqRSJXPTqX219YzNbC0rBL+woFhkice32ROrubgmO7t+P1fz+VG8b04YUFeZx+zyz+5+2VjeowlU6rFYlj7s74P34AwFu3nar+iyZifUEJ985YxSsLN5GcaIzpl875x3bjxD6d6Ng6hVYpiRSWVrJg3U7mfrGD3XvL+d2lxx3Wex3KabWaNUUkjn2wZjsrtxTxh8uGKSyakJ6d0vjjhBHcfMbRvLhgI28s3sysVYv/tT450aisdtwhKcEY2bMDVdVOYkJsP2MFhkgce+SDXDq3acFFwzRuVFM0qGtbfnZ+W+4YP4jFebtZtbWIXSXl7NhTQcvkRE7o3YHhPduTltIwX+UKDJE4tWJzIR+s2c5Pxg0kJUndlU2ZmTGsR3uG9Wgfah36LRKJU498kEtaSiJXjtK4UVI/FBgicWjL7lJeW7SJb2X1oF1actjlSJxQYIjEocc++oKqaue60ZqCVeqPAkMkzuQXlfLEJ2u5cNhR9OyUFnY5EkcUGCJx5i/vfU5FlfP9cwaEXYrEGQWGSBzZvHsvT89dz6UjMumT3irsciTOKDBE4sgDs3Jwd753dv+wS5E4pMAQiRMbdpTwt3kb+FZWD3p0VN+F1L9Yzuk9zczyzWxpHevPMLPdZrYwuP0yYt04M1tlZjlmdnusahSJJ//77hrMjFvP6hd2KRKnYrmH8Tgw7iBtPnD34cHtLgAzSwQeAMYDQ4CJZjYkhnWKNHmfrd/JCwvyuPaU3nRr1zLsciROxSww3H02sOMwnjoKyHH3XHcvB54DLq7X4kTiSHW186tXl5HRpgX/rr4LiaGw+zBONrNFZvaWmR0TLMsENkS0yQuWiUgtnp+fx6K83dwxfhCtW2h4OImdMH+7FgC93L3YzM4HXgb6A7WNz1vnpB1mNgmYBNCzpyaIkeZl994K/vvtlYzs2Z5LRuj/Komt0PYw3L3Q3YuD+28CyWaWTs0eRY+Ipt2BTQd4nSnunuXuWRkZGTGtWaSx+d93V7OjpJxfXzRU811IzIUWGGbW1YLfcDMbFdRSAMwD+ptZHzNLASYAr4ZVp0hjtWD9Th7/eC1XjOrJsd3bhV2ONAMxOyRlZs8CZwDpZpYH3AkkA7j7Q8A3gZvNrBLYC0zwmvliK83sVmA6kAhMc/dlsapTpCkqrajiJ88vplvbVG4fPyjscqSZiFlguPvEg6yfDEyuY92bwJuxqEskHvx55hpy8ot5/NoTaJOq4culYYR9lpSIHKKlG3fz0Pu5fPP47pwxsHPY5UgzosAQaUIqq6r5yfOL6dQqhV9coOtZpWHppG2RJuSpOetYvrmQB68cqZn0pMFpD0OkicgvKuW+d1Zzav90xg/tGnY50gwpMESaiN+9uZKyymruuljXXEg4FBgiTcCc3AJe+mwjk07rq4mRJDRRB4aZjTGza4P7GWam2eVFGsC+wQUz27fkljM1dLmEJ6rAMLM7gZ8CdwSLkoG/xqooEfl/7yzfysotRfz4vIG0TEkMuxxpxqLdw7gEuAjYA+Dum4A2sSpKRGq4Ow/MyqFXpzS+dly3sMuRZi7awCgPhu1wADPTQVSRBjB7zXaWbNzNzacfTVKiuhwlXNH+Bv7dzB4G2pvZjcC7wCOxK0tEAB6YmUO3dqlcOrJ72KWIRHfhnrv/wczOBQqBgcAv3X1GTCsTaebm5hbw6dod/OrCIaQkae9CwhdVYASHoGa6+wwzGwgMNLNkd6+IbXkizdfkWTmkt05hwihNDCaNQ7T/tswGWphZJjWHo64FHo9VUSLN3dzcAj5Ys50bT+1LarLOjJLGIdrAMHcvAS4F/uzulwAa+UwkBtyd37+9kq5tU7nmlN5hlyPyL1EHhpmdDFwJvBEs08CFIjEwfdlWPlu/ix+c2197F9KoRBsYtwG3Ay+6+7LgKu+ZsStLpHmqrKrmnukrOTqjFd/QmVHSyES7l1ACVAMTzewqwAiuyRCR+vPCgjw+37aHh646XtddSKMTbWA8DfwHsJSa4BCRelZSXsn9M9Ywomd7zjumS9jliHxFtIGxzd1fO5QXNrNpwNeAfHcfWsv6K6kZnwqgGLjZ3RcF69YCRUAVUOnuWYfy3iJN0YOzPmdLYSmTrxih4culUYo2MO40s6nAP4GyfQvd/cUDPOdxYDLwZB3rvwBOd/edZjYemAKcGLH+THffHmV9Ik3a2u17mDI7l0tHZJLVu2PY5YjUKtrAuBYYRM0otfsOSTlQZ2C4+2wz632A9R9HPJwDqIdPmq27Xl9OSlICt48fFHYpInWKNjCGufuxMazjeuCtiMcOvGNmDjzs7lNi+N4iofrniq3MXJnPf14wmM5tU8MuR6RO0QbGHDMb4u7L67sAMzuTmsAYE7F4tLtvMrPOwAwzW+nus+t4/iRgEkDPnhpCQZqW0ooqfv3acvp1bq2L9KTRi/a8vTHAQjNbZWaLzWyJmS0+0jc3s+OAqcDF7l6wb3kw3wbung+8BIyq6zXcfYq7Z7l7VkZGxpGWJNKg7n93Net3lHDXRceQrNNopZGLdg9jXH2/sZn1pKYP5Gp3Xx2xvBWQ4O5Fwf2xwF31/f4iYVuct4tHZudyeVYPTumXHnY5IgcV7fDm6w71hc3sWeAMIN3M8oA7qek0x90fAn4JdAIeDE4h3Hf6bBfgpWBZEvCMu799qO8v0piVV1bzk+cXk966BT+7YHDY5YhEJWbjQbn7xIOsvwG4oZblucCwWNUl0hg89P7nrNxSxJSrj6ddy+SwyxGJig6aijSwFZsL+fPMNXztuG6MPaZr2OWIRE2BIdKASiuquO25z2jXMoVfXXRM2OWIHBINUS7SgH735gpWby3m8WtPIL11i7DLETkk2sMQaSAzV27liU/Wce3o3pwxsHPY5YgcMgWGSAPILyrlx/9YzKCubfjpOA3/IU2TAkMkxiqqqrnl6QWUlFfxp4kjNIueNFnqwxCJsd+8sYJ5a3fyxwnDGdClTdjliBw27WGIxNDLn23k8Y/Xct3oPlw8PDPsckSOiAJDJEZy8ou4/cXFjOrTkTvOV7+FNH0KDJEY+e2bK0lOTGDyFSM0sKDEBf0Wi8TAnNwCZq7M5+YzjqZzG81xIfFBgSFSz9yd3721kq5tU7ludJ+wyxGpNwoMkXr25pItLNqwix+eO0Cn0EpcUWCI1KOKqmrumb6SAV1a843jNU29xBcFhkg9em7eBtYWlHD7+EEkJljY5YjUKwWGSD0prahi8sw1ZPXqwJkaK0rikAJDpJ48PXc9WwvL+OHYAQQzRorEFQWGSD0oKa/kL+/lcMrRnTjlaM3PLfEppoFhZtPMLN/Mltax3szsT2aWY2aLzWxkxLprzGxNcLsmlnWKHKknP1nH9uJyfjR2QNiliMRMrPcwHgfGHWD9eKB/cJsE/AXAzDoCdwInAqOAO82sQ0wrFTlMRaUVPPz+55w+IIPje3UMuxyRmIlpYLj7bGDHAZpcDDzpNeYA7c2sG3AeMMPdd7j7TmAGBw4ekdBMnpXDzpIKfniu9i4kvoXdh5EJbIh4nBcsq2u5SKOSvXYHj8zOZcIJPRjWo33Y5YjEVNiBUdupJH6A5V99AbNJZpZtZtnbtm2r1+JEDmRPWSU/+sciMju05D+/NiTsckRiLuzAyAN6RDzuDmw6wPKvcPcp7p7l7lkZGRkxK1Rkf799cwXrd5Rw72XDad1Cc5FJ/As7MF4Fvh2cLXUSsNvdNwPTgbFm1iHo7B4bLBNpFGatzOfpueu58dS+jOqjjm5pHmL6b5GZPQucAaSbWR41Zz4lA7j7Q8CbwPlADlACXBus22FmdwPzgpe6y90P1Hku0mDWbt/Dbc99xqCubdTRLc1KTAPD3SceZL0Dt9SxbhowLRZ1iRyuPWWVTHoqm4QEY8rVWRqNVpqVsA9JiTQZ7s6P/r6InPxiJk8cSc9OaWGXJNKgFBgiUZo8M4e3l23hZ+cPZkx/Df8hzY8CQyQKby3ZzL0zVnPJiEyuH6NZ9KR5UmCIHMTSjbv5wd8XMqJne3536bEaiVaaLQWGyAHkF5ZywxPZdExLUSe3NHu62kikDqUVVUx6aj6FpRU8f9MpZLRpEXZJIqFSYIjUwt35xctLWbhhFw9dNZIhR7UNuySR0OmQlEgtnvxkHf+Yn8f3zurHuKHdwi5HpFFQYIjs55PPC7jr9eWcM7gL3z9HV3KL7KPAEImQt7OEW55ZQO9Oadx/+TASEnRGlMg+CgyRQGlFFTf9dT4VldVM+XYWbVKTwy5JpFFRp7cINZ3cP3txCcs2FTL121kcndE67JJEGh3tYYgAj320lhc/28gPzhnA2YO7hF2OSKOkwJBm771V+fzXG8sZO6QLt57ZL+xyRBotBYY0a2u2FvHvz3zGwK5tuf/y4erkFjkABYY0WwXFZVz3xDxSUxJ59JosWmmaVZEDUmBIs1RaUcV3nppPfmEZj3w7i6Patwy7JJFGT/9SSbNTVe3c9txnzF+/k8kTRzK8R/uwSxJpErSHIc2Ku/OrV5cxfdlWfnHBEC44TsN+iEQrpoFhZuPMbJWZ5ZjZ7bWsv9/MFga31Wa2K2JdVcS6V2NZpzQfD773OU/NWcd3TuvLdZoISeSQxOyQlJklAg8A5wJ5wDwze9Xdl+9r4+4/iGj/78CIiJfY6+7DY1WfND+PfvgF90xfxdeHH8VPxw0KuxyRJieWexijgBx3z3X3cuA54OIDtJ8IPBvDeqQZm/bhF9z9+nLGD+3KPZdpjCiRwxHLwMgENkQ8zguWfYWZ9QL6ADMjFqeaWbaZzTGzr9f1JmY2KWiXvW3btvqoW+LMYx99wV1BWPxp4giSE9V1J3I4YnmWVG3/wnkdbScAz7t7VcSynu6+ycz6AjPNbIm7f/6VF3SfAkwByMrKquv1pRlyd/48M4f7ZqzmvGO6KCxEjlAs/3rygB4Rj7sDm+poO4H9Dke5+6bgZy7wHl/u3xA5oKpq585Xl3HfjNVcOjKTyVeMVFiIHKFY/gXNA/qbWR8zS6EmFL5ytpOZDQQ6AJ9ELOtgZi2C++nAaGD5/s8VqU1pRRXfe/Yznvyk5myoey8bprAQqQcxOyTl7pVmdiswHUgEprn7MjO7C8h2933hMRF4zt0jDycNBh42s2pqQu33kWdXidRla2Epk57MZlHebn5+/mBuPK1v2CWJxA378vd005aVleXZ2dlhlyEhWZy3ixufzKaotJL7Lx/Oecd0DbskkUbPzOa7e1Y0bTU0iMSFF+bn8bOXlpDeugUv3HwKg7u1DbskkbijwJAmrayyirtfX85f56znpL4dmXzFSNJbtwi7LJG4pMCQJmvDjhK+99xnfLZ+F985rS8/Pm8gSercFokZBYY0Oe7O8/Pz+PVrNedB/OXKkYw/VoMIisSaAkOalILiMn720hKmL9vKqD4dufeyYfTomBZ2WSLNggJDmow3Fm/mF68spbi0kp+dP4jrx/QlUWNCiTQYBYY0etuLy7jz1WW8sXgzx2a24w+XDWNg1zZhlyXS7CgwpNGqqnaenruOP0xfxd6KKn583kC+c1pfdWyLhESBIY3Sp1/s4NevLWPZpkLG9EvnVxcdQ7/OrcMuS6RZU2BIo5KTX8Tv31rFuyu20rVtKg9cMZLzj+2KmfoqRMKmwJBGobC0gnunr+KpOetolZLEj88byHWj+9AyJTHs0kQkoMCQULk7ry/ezF2vL6eguIyrTurFbWf3p5Ou1hZpdBQYEppVW4q4+/UXGGD2AAALyElEQVTlfJiznWMz2/HoNVkc17192GWJSB0UGNLgdu4p5/53V/PXOetok5rMry86hqtO6qVrKkQaOQWGNJjC0gqmfvAF0z78gr0VVVx9Ui++f84AOrRKCbs0EYmCAkNibldJOU99so6pH37B7r0VjB/alR+eO4D+XXTxnUhTosCQmMnbWcK0D9fy3Lz1lJRXcc7gznz/nAEMzWwXdmkichgUGFKvqqudD3O289ScdfxzxVYSzLho2FFMOr0vg7pqUiORpiymgWFm44A/UjOn91R3//1+6/8NuAfYGCya7O5Tg3XXAP8ZLP8vd38ilrXKkcnbWcKLCzbywoI81hWU0KlVCjedfjRXntSLzPYtwy5PROpBzALDzBKBB4BzgTxgnpm96u7L92v6N3e/db/ndgTuBLIAB+YHz90Zq3rl0O3YU87bS7fw6qKNzMndAcDJfTvxw3MHMG5oV1ok6aI7kXgSyz2MUUCOu+cCmNlzwMXA/oFRm/OAGe6+I3juDGAc8GyMapUo5ReV8u7yfN5etoWPcrZTVe30TW/Fj84dwCUjM+neQXNTiMSrWAZGJrAh4nEecGIt7b5hZqcBq4EfuPuGOp6bGatCpW7V1c6Sjbt5f/U2Zq3KZ+GGXbhDz45p3HhqXy4c1o0h3dpqrCeRZiCWgVHbN4jv9/g14Fl3LzOzm4AngLOifG7Nm5hNAiYB9OzZ8/CrFaAmINbkFzP3iwLm5BbwyecF7CypwAyOy2zHD88ZwNhjujKgS2uFhEgzE8vAyAN6RDzuDmyKbODuBREPHwH+O+K5Z+z33PdqexN3nwJMAcjKyqo1VKRu+UWlLNtYyKK8XSxYv4uF63dSWFoJQGb7lpw1qAunDUhnTL90je8k0szFMjDmAf3NrA81Z0FNAK6IbGBm3dx9c/DwImBFcH868Fsz6xA8HgvcEcNa497e8io+31bM6q1FrNpSxMotRazYXEh+URkAZjCwSxsuOK4bI3p24OS+nejeoaX2IkTkX2IWGO5eaWa3UvPlnwhMc/dlZnYXkO3urwLfM7OLgEpgB/BvwXN3mNnd1IQOwF37OsDlwKqrnY279rJicyHLNhWyfHMhq7YUsWFnCR7sf6UkJtCvc2vG9EtnaGY7hma2Y8hRbWndQpfliEjdzD1+juJkZWV5dnZ22GU0iMLSCtYXlLCuoIQvtheTu20POduKyckvpqS8CqjZa+ib3opB3doyoHMb+ndpTf/Oremd3opkTXMqIoCZzXf3rGja6l/KRqi62ikqrSS/qJSthWVsKSxlfcEevigoYV3BHtYVlLB7b8WXntOtXSp9M1rxraweDOjShoFd2zC4WxvSUvQRi0j90LfJIXB3qqqdymqnoqqaiiqnvLKaiqpqyiqrKa+spryqmrKKKsoqqymtqKI0+FlWUUVJec1tb0UVe8oqKSmvoriskuLSSorLKikqrWD33ppb9X47fgkGmR1a0rtTKy4c1o2eHdPo0SGNnp3S6JPeSsEgIjGnbxnggj99wN7yKqrcqaxyqt2pqHKqqquprK5ZVlXtVFRXUx9H8FKTE2jdIom0lCTSUhJpm5pMRpsW9ElvRbuWybRPS6Zdy5plXdum0qVtKt3ap+rKaREJlQIDGNClDRVV1SQlGAkJRlKCkZiQQFKCkZRowc+ax8mJCSQlGskJCaQkJZCcmEByopGSlECLpITgZyKpyQmkJCbSMiWB1OREUpMTSUtJJDUpkQRNFCQiTZACA7j/8uFhlyAi0ujpVBkREYmKAkNERKKiwBARkagoMEREJCoKDBERiYoCQ0REoqLAEBGRqCgwREQkKnE1Wq2ZbQPWhV3HftKB7WEXUU+0LY1PvGwHaFvC0svdM6JpGFeB0RiZWXa0Qwc3dtqWxidetgO0LU2BDkmJiEhUFBgiIhIVBUbsTQm7gHqkbWl84mU7QNvS6KkPQ0REoqI9DBERiYoCo56Z2d1mttjMFprZO2Z2VB3trjGzNcHtmoauMxpmdo+ZrQy25yUza19Hu7VmtiTY5uyGrjMah7At48xslZnlmNntDV3nwZjZZWa2zMyqzazOs3CayGcS7bY06s8EwMw6mtmM4O95hpl1qKNdVfCZLDSzVxu6ziPm7rrV4w1oG3H/e8BDtbTpCOQGPzsE9zuEXXstdY4FkoL7/w38dx3t1gLpYdd7pNsCJAKfA32BFGARMCTs2vercTAwEHgPyDpAu6bwmRx0W5rCZxLU+T/A7cH92w/wt1Icdq1HctMeRj1z98KIh62A2jqJzgNmuPsOd98JzADGNUR9h8Ld33H3yuDhHKB7mPUciSi3ZRSQ4+657l4OPAdc3FA1RsPdV7j7qrDrqA9Rbkuj/0wCFwNPBPefAL4eYi0xo8CIATP7jZltAK4EfllLk0xgQ8TjvGBZY3Yd8FYd6xx4x8zmm9mkBqzpcNW1LU3xc6lLU/tM6tJUPpMu7r4ZIPjZuY52qWaWbWZzzKzJhYrm9D4MZvYu0LWWVT9391fc/efAz83sDuBW4M79X6KW54ZyutrBtiVo83OgEni6jpcZ7e6bzKwzMMPMVrr77NhUXLd62JZG8blEsx1RaDKfycFeopZlje5v5RBepmfwufQFZprZEnf/vH4qjD0FxmFw93OibPoM8AZfDYw84IyIx92pOY7b4A62LUGH/NeAsz04CFvLa2wKfuab2UvUHEZo8C+netiWPKBHxOPuwKb6qzA6h/D7daDXaBKfSRQaxWcCB94WM9tqZt3cfbOZdQPy63iNfZ9Lrpm9B4ygpo+mSdAhqXpmZv0jHl4ErKyl2XRgrJl1CM6mGBssa1TMbBzwU+Aidy+po00rM2uz7z4127K04aqMTjTbAswD+ptZHzNLASYATe5MlqbymUSpqXwmrwL7zna8BvjK3lPw994iuJ8OjAaWN1iF9SHsXvd4uwEvUPPHuRh4DcgMlmcBUyPaXQfkBLdrw667jm3Joeb48cLg9lCw/CjgzeB+X2rOXFkELKPmUEPotR/OtgSPzwdWU/NfX6PbFuASav7rLgO2AtOb8Gdy0G1pCp9JUGMn4J/AmuBnx2D5v/7ugVOAJcHnsgS4Puy6D/WmK71FRCQqOiQlIiJRUWCIiEhUFBgiIhIVBYaIiERFgSEiIlFRYIgAZlZ8hM9/Prh690Bt3jvQqKzRttmvfYaZvR1te5EjocAQOUJmdgyQ6O65Df3e7r4N2Gxmoxv6vaX5UWCIRLAa95jZ0mA+icuD5Qlm9mAwf8PrZvammX0zeNqVRFzZa2Z/CQaYW2Zmv67jfYrN7F4zW2Bm/zSzjIjVl5nZp2a22sxODdr3NrMPgvYLzOyUiPYvBzWIxJQCQ+TLLgWGA8OAc4B7grGBLgV6A8cCNwAnRzxnNDA/4vHP3T0LOA443cyOq+V9WgEL3H0k8D5fHm8syd1HAd+PWJ4PnBu0vxz4U0T7bODUQ99UkUOjwQdFvmwM8Ky7VwFbzex94IRg+T/cvRrYYmazIp7TDdgW8fhbwZDiScG6IdQMFROpGvhbcP+vwIsR6/bdn09NSAEkA5PNbDhQBQyIaJ9PzXAaIjGlwBD5stqG0z7QcoC9QCqAmfUB/gM4wd13mtnj+9YdROQYPWXBzyr+/2/0B9SMtzSMmiMDpRHtU4MaRGJKh6REvmw2cLmZJQb9CqcBnwIfAt8I+jK68OXh6VcA/YL7bYE9wO6g3fg63icB2NcHckXw+gfSDtgc7OFcTc3UpfsMoOmORitNiPYwRL7sJWr6JxZR81//T9x9i5m9AJxNzRfzamAusDt4zhvUBMi77r7IzD6jZpTYXOCjOt5nD3CMmc0PXufyg9T1IPCCmV0GzAqev8+ZQQ0iMaXRakWiZGat3b3YzDpRs9cxOgiTltR8iY8O+j6iea1id29dT3XNBi72mvnhRWJGexgi0XvdzNoDKcDd7r4FwN33mtmd1Mw1vb4hCwoOm92nsJCGoD0MERGJijq9RUQkKgoMERGJigJDRESiosAQEZGoKDBERCQqCgwREYnK/wG41bBiFWBBgAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cv of rmse : 0.6526159466214168\n",
      "Lasso picked 20 features and eliminated the other 4 features\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE on Training set : 0.39935132072109775\n",
      "RMSE on Test set : 0.7471092845443842\n",
      "r2_score on Training set : 0.8400803867114971\n",
      "r2_score on Test set : 0.6674396734975812\n"
     ]
    }
   ],
   "source": [
    "lasso = LassoCV()\n",
    "lasso.fit(X_train, y_train)\n",
    "alpha = lasso.alpha_\n",
    "print(\"Best alpha :\", alpha)\n",
    "\n",
    "mses = np.mean(lasso.mse_path_, axis = 1)\n",
    "plt.plot(np.log10(lasso.alphas_), mses) \n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()    \n",
    "\n",
    "mse_cv = np.mean(lasso.mse_path_, axis = 1)\n",
    "rmse_cv = np.sqrt(mse_cv)\n",
    "print(\"cv of rmse :\", min(rmse_cv))\n",
    "\n",
    "\n",
    "coefs = pd.Series(lasso.coef_, index = X_train.columns)\n",
    "print(\"Lasso picked \" + str(sum(coefs != 0)) + \" features and eliminated the other \" +  \\\n",
    "      str(sum(coefs == 0)) + \" features\")\n",
    "imp_coefs = pd.concat([coefs.sort_values().head(10),\n",
    "                     coefs.sort_values().tail(10)])\n",
    "imp_coefs.plot(kind = \"barh\")\n",
    "plt.title(\"Coefficients in the Lasso Model\")\n",
    "plt.show()\n",
    "\n",
    "mses = np.mean(lasso.mse_path_, axis = 1)\n",
    "plt.plot(np.log10(lasso.alphas_), mses) \n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show() \n",
    "\n",
    "\n",
    "y_train_pred = lasso.predict(X_train)\n",
    "rmse_train = np.sqrt(mean_squared_error(y_train,y_train_pred))\n",
    "print(\"RMSE on Training set :\", rmse_train)\n",
    "\n",
    "\n",
    "y_test_pred = lasso.predict(X_test)\n",
    "y_test_pred += mean_diff\n",
    "\n",
    "rmse_test = np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "print(\"RMSE on Test set :\", rmse_test)\n",
    "\n",
    "r2_score_train = r2_score(y_train,y_train_pred)\n",
    "r2_score_test = r2_score(y_test,y_test_pred)\n",
    "print(\"r2_score on Training set :\", r2_score_train)\n",
    "print(\"r2_score on Test set :\", r2_score_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE on Training set : 0.44079674370089045\n",
      "RMSE on Test set : 0.7466686170616599\n",
      "r2_score on Training set : 0.8051644346733033\n",
      "r2_score on Test set : 0.667831865926737\n"
     ]
    }
   ],
   "source": [
    "lr = LinearRegression()\n",
    "\n",
    "lr.fit(X_train, y_train)\n",
    "\n",
    "y_train_pred = lr.predict(X_train)\n",
    "y_test_pred = lr.predict(X_test)\n",
    "y_test_pred += mean_diff\n",
    "\n",
    "rmse_train = np.sqrt(mean_squared_error(y_train,y_train_pred))\n",
    "rmse_test = np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "print(\"RMSE on Training set :\" , rmse_train)\n",
    "print(\"RMSE on Test set :\" , rmse_test)\n",
    "\n",
    "r2_score_train = r2_score(y_train,y_train_pred)\n",
    "r2_score_test = r2_score(y_test,y_test_pred)\n",
    "print(\"r2_score on Training set :\" , r2_score_train)\n",
    "print(\"r2_score on Test set :\" , r2_score_test)\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
